本文将讲述OpenRefine是什么,OpenRefine怎么用,以及回答实验留下的问题。
OpenRefine 数据处理
jskyzero
2020/03/04
OpenRefine简介
OpenRefind,之前又被称为Google Refine,是一个开源的数据处理应用程序。可以用来清洗数据/转化数据。
OpenRefind完全建立在本地,使用网页交互,通俗来讲,通过载入特定格式文件新建项目,每个项目是一个表,可以对表中的数据进行加工和处理,包括合并类似项,删除项,修改项目值,最后可以导出为指定格式。完成获取到的数据的初步提纯处理。
OpenRefine使用
可以从官方的下载界面下载对应系统的软件包,请注意,该软件需要Java环境,顺手需要先下个最新版本的Java。
接下来的使用以Windows 10为例,下载好后解压文件,运行openrefine.exe
,就可以看到运行的shell中间显示关于本地服务器的信息,接着在浏览器中打开localhost:3333
就可以看到该程序的交互界面。
可能是我放置的文件位置不太对,需要以管理员权限运行才可以成功运行本地服务器。
我们已经明白了使用OpenRefine的目的是对数据进行初步处理,那么接下来的使用方法也就会针对目的重点说明。
数据导入
初始页面左边有几个选项,依次是新建/打开/导入项目和语言设定,英语不好的推荐先在语言设定里面把语言设置为中文,然后在新建项目里面可以选择以本地文件/URL/剪切板等多中方式载入文件,上面的介绍里面我们可以看到原生的OpenRefine就已经支持相当多的文件格式,比如JSON
,XML
, CSV
等等主流格式,这在某种程度上告诉了我们以后获取文件可以暂且先把文件保存为这几种格式。
选择文件以后会进入新建项目界面,上面我们已经提到过,OpenRefine的工作模式是一张表一个项目,我们现在可以看到这张表的初步样子,同时可以在配置里面调整字符编码和一些文件载入属性,保证文件载入正确。
确认没啥问题的话就径直新建项目吧。
数据选择
首先要明白OpenRefine操作的数据一般都很大,手动一行行基本是行不通的,因而,基本工作思路是先选择上需要修改的对象,然后一并修改,这个过程非常类似于关系型数据库中对表格操作。OpenRefine提供了两种方法,分别是归类和文本过滤器。
归类大概就是对一列的分类,通过分类来筛选不同类别,最基本的有根据文本内容/数值大小/时间/函数分布等等,这里重点讲一下自定义归类,接触一下OpenRefine的自定义方法。
在自定义归类里面的语言上选择python / Jython,最终的数值就是return的值,姑且可以当作一个小处理程序,系统给定了一些基本且简单的数据接口函数和函数,具体可以参考界面中的帮助。既然可以使用python那么我们自然可以使用函数,列表生成式,甚至应该连类都是可以用的,如下简单的实验了下,请注意实验中关于缩进,一格空格即可,看来再也不用游标卡尺了(滑稽
def f(x):
return x;
return "".join([f(x) for x in value]);
至于正则表达式就没什么好说的了,从零开始30分钟入门教程可以帮到第一次接触这个读起来有点反人类的东西,如此反人类还这么多人就可见这个东西在匹配文本上有多实用。
数据更新
更新的对象就单个单元格,列,和行来讲。
对于单个单元格,单纯修改它可能是最方便的方法,毕竟单个。
对于列,OpenRefine为我们提供了强大的转化功能,不过请注意选单在edit cell也就是编辑单元格里面,和上面的归类类似,有很多系统自定好的常用转化可以用,当然也可以自定义转化。
在edit column也就是编辑列选单里面则是更像是对列而不是列里面的数据的操作,除了修改列名/删除该列以外,还可以通过此列派生出新的列,不过自定义表达式里面是可以访问到其他列的,也就是说需要新列的时候我们随便找个列派生其实就可以了。
对于行,似乎只看到有加星标加旗子,和删除所有匹配行的选项。
数据删除
关于删除的方法在上面都有提到,这里再说一次是为了重申OpenRefine的数据洗白功能,所谓洗白也就是去掉无用的冗杂数据,在大数据时代,去除冗杂数据,精炼有效分析对象自然是很重要的,去除数据的标准自然是方案特意的,就不再啰嗦了。
数据导出
完成上述步骤我们也就完成了对数据的初步加工,接下将成果导出就好了,如果之前的操作有失误的地方也可以UNDO撤销,导出格式可以是CSV,Excel和HTML table等。
关于实验留下的问题
实验过程可以参考上述使用说明,这里就不提供截图什么的证明了
举例说明正则表达式。
# 两个匹配邮箱的正则表达式 \w+@\w+\.\w+
正则表达式的作用有哪些? 从日常使用中我们可以知道,正则表达式的作用是通过字符串来描述,匹配一些列符合某个规则的字符串,方便我们搜索,替换匹配到的文本
通过操作,举例说明OpenRefine 中正则表达式的应用。 举一个简单的例子,在包含数字的的一列使用文本过滤器,选中正则表达式,输入
^\d2$
就可以匹配到该列只含有两位数数字的选中行。或是通过^\d+$
匹配到只含大于一位的数字的行。探索OpenRefine 更多数据处理功能。 可以参考上文使用Jython的部分。